package 斗地主;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

public class PokerGame2 {
//    牌盒  Map
//    map集合中有两个分别为 hashmap，treemap
//    hashmap为默认情况下使用，速度快
//    treemap则是在需要排序的条件下使用
//    此时我们只需要将牌和序号产生对应关系，不需要按照序号进行排序，所以只需要使用HashMap
    static HashMap<Integer,String> hm=new HashMap<>();
    static ArrayList<Integer> list=new ArrayList<>();
    static {
        String[] color = {"♥", "♠", "♦", "♣"};
        String[] number = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
//        序号
        int serialNumber=1;

        for (String s : color) {
//            s代表color中的每一个花色,获得花色并和数字配对
            for (String n : number) {
//                String代表number中的每一个数字
                hm.put(serialNumber,s+n);
                list.add(serialNumber);
                serialNumber++;
            }
        }
//        当结束排序后添加大小王
        hm.put(serialNumber,"小王");
        list.add(serialNumber);
        hm.put(serialNumber+1,"大王");
        list.add(serialNumber+1);
//        System.out.println(list);测试序号
//        System.out.println(hm);测试牌号
    }
    public PokerGame2(){
//      洗牌，洗的是序号
        Collections.shuffle(list);
//        发牌
        /*
        Arraylist<Integer>list=new Arraylist();
        可以使用Arraylist但，里面的数据是乱的，需要排序，多一步，可以直接使用Treeset
         */
//        treeSet可以直接按照从小到大的顺序进行排序
        TreeSet<Integer> load=new TreeSet<>();
        TreeSet<Integer> play1=new TreeSet<>();
        TreeSet<Integer> play2=new TreeSet<>();
        TreeSet<Integer> play3=new TreeSet<>();
        for (int i = 0; i < list.size(); i++) {
//            i:代表集合中的每一个索引
//            list.get(i)代表牌的序号
            int serialNumber=list.get(i);
            if (i<=2){
                load.add(serialNumber);
                continue;
            }
            //        给三个玩家发牌
            if (i%3==0){
//            给第一个玩家发牌
                play1.add(serialNumber);
            } else if (i%3==1) {
//            给第二个玩家发牌
                play2.add(serialNumber);
            }else {
//            给第三个玩家发牌
                play3.add(serialNumber);
            }

        }

  /*      System.out.println("底牌"+load);
        System.out.println("玩家一"+play1);
        System.out.println("玩家二"+play2);
        System.out.println("玩家三"+play3);*/
        //    看牌,即遍历每个集合（写成方法,调用方法使用的是 void）
        lookpoker("底牌",load);
        lookpoker("玩家一",play1);
        lookpoker("玩家二",play2);
        lookpoker("玩家三",play3);
        }
    public void lookpoker(String name,TreeSet<Integer>ts){
//        遍历treeSet集合，得到里面的每一张牌，再拿着序号到map集合中去找真正的牌
        System.out.print(name+" ");

        for (Integer poker : ts) {
            String s = hm.get(poker);
            System.out.print(s+" ");
        }
        System.out.println();
    }
}
